﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace V82.ОбщиеМодули
{
	public partial class ПолучениеФайловИзИнтернетаКлиентСервер
	{
		// Функция для получения файла из интернета.
		//
		// Параметры:
		// URL           - строка - url файла в формате:
		//                 [Протокол://]<Сервер>/<Путь к файлу на сервере>
		// Пользователь  - строка - пользователь от имени которого установлено соединение
		// Пароль        - строка - пароль пользователя от которого установлено соединение
		// Порт          - число  - порт сервера с которым установлено соединение
		// ЗащищенноеПассивноеСоединение
		//
		// НастройкаСохранения - соответствие - содержит параметры для сохранения скачанного файла
		//                 ключи:
		//                 МестоХранения - строка - может содержать
		//                        "Клиент" - клиент,
		//                        "Сервер" - сервер,
		//                        "ВременноеХранилище" - временное хранилище
		//                 Путь - строка (необязательный параметр) -
		//                        путь к каталогу на клиенте либо на сервере либо адрес во временном хранилище
		//                        если не задано будет сгенерировано автоматически
		//
		// Возвращаемое значение:
		// структура
		// успех  - булево - успех или неудача операции
		// строка - строка - в случае успеха либо строка-путь сохранения файла
		//                   либо адрес во временном хранилище
		//                   в случае неуспеха сообщение об ошибке
		//

		public object ПодготовитьПолучениеФайла(/*	знач URL,
									знач Пользователь			= Неопределено,
									знач Пароль					= Неопределено,
									знач Порт					= Неопределено,
									знач ЗащищенноеСоединение	= Ложь,
									знач ПассивноеСоединение	= Ложь,
									знач НастройкаСохранения*/)
		{
			//НастройкаСоединения = Новый Соответствие;
			//НастройкаСоединения.Вставить("Пользователь",	Пользователь);
			//НастройкаСоединения.Вставить("Пароль",			Пароль);
			//НастройкаСоединения.Вставить("Порт",			Порт);
			//Протокол = РазделитьURL(URL).Протокол;
			if(true/*Протокол = "ftp"*/)
			{
				//НастройкаСоединения.Вставить("ПассивноеСоединение", ПассивноеСоединение);
			}
			//НастройкаПроксиСервера = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().НастройкиПроксиСервера;
			//НастройкаПроксиСервера = ПолучениеФайловИзИнтернета.ПолучитьНастройкиПроксиНаСервере1СПредприятие();
			if(true/*НастройкаПроксиСервера = Неопределено ИЛИ НастройкаПроксиСервера.Получить("ИспользоватьПрокси") <> Истина*/)
			{
				//НастройкаПроксиСервера = ПолучитьПустыеНастройкиПроксиСервера();
			}
			//Результат = ПолучитьФайлИзИнтернет(URL, НастройкаСохранения, НастройкаСоединения, НастройкаПроксиСервера);
			return null;
		}
		// Функция для получения файла из интернета.
		//
		// Параметры:
		// URL - строка - url файла в формате: [Протокол://]<Сервер>/<Путь к файлу на сервере>
		//
		// НастройкаСоединения - Соответствие -
		//		ЗащищенноеСоединение* - булево - соединение защищенное
		//		ПассивноеСоединение*  - булево - соединение защищенное
		//		Пользователь - строка - пользователь от имени которого установлено соединение
		//		Пароль       - строка - пароль пользователя от которого установлено соединение
		//		Порт         - число  - порт сервера с которым установлено соединение
		//		* - взаимоисключающие ключи
		//
		// НастройкиПрокси - Соответствие:
		//		ИспользоватьПрокси - использовать ли прокси-сервер
		//		НеИспользоватьПроксиДляЛокальныхАдресов - использовать ли прокси-сервер для локальных адресов
		//		ИспользоватьСистемныеНастройки - использовать ли системные настройки прокси-сервера
		//		Сервер       - адрес прокси-сервера
		//		Порт         - порт прокси-сервера
		//		Пользователь - имя пользователя для авторизации на прокси-сервере
		//		Пароль       - пароль пользователя
		//
		// НастройкаСохранения - соответствие - содержит параметры для сохранения скачанного файла
		//		МестоХранения - строка - может содержать
		//			"Клиент" - клиент,
		//			"Сервер" - сервер,
		//			"ВременноеХранилище" - временное хранилище
		//		Путь - строка (необязательный параметр) - путь к каталогу на клиенте либо на сервере,
		//			либо адрес во временном хранилище,  если не задано будет сгенерировано автоматически
		//
		// Возвращаемое значение:
		// структура
		// успех  - булево - успех или неудача операции
		// строка - строка - в случае успеха либо строка-путь сохранения файла
		//                   либо адрес во временном хранилище
		//                   в случае неуспеха сообщение об ошибке
		//

		public object ПолучитьФайлИзИнтернет(/*знач URL,
                               знач НастройкаСохранения,
                               знач НастройкаСоединения = Неопределено,
                               знач НастройкиПрокси = Неопределено*/)
		{
			/*// Объявление переменных перед первым использованием в качестве
*/
			/*// параметра метода Свойство, при анализе параметров получения файлов
*/
			/*// из ПараметрыПолучения. Содержат значения переданных параметров получения файла
*/
			//URLРазделенный = РазделитьURL(URL);
			//ИмяСервера           = URLРазделенный.ИмяСервера;
			//ПутьКФайлуНаСервере  = URLРазделенный.ПутьКФайлуНаСервере;
			//Протокол             = URLРазделенный.Протокол;
			//ЗащищенноеСоединение = НастройкаСоединения.Получить("ЗащищенноеСоединение");
			//ПассивноеСоединение  = НастройкаСоединения.Получить("ПассивноеСоединение");
			//ИмяПользователя      = НастройкаСоединения.Получить("Пользователь");
			//ПарольПользователя   = НастройкаСоединения.Получить("Пароль");
			//Порт                 = НастройкаСоединения.Получить("Порт");
			//НастройкиПрокси = ?(НастройкиПрокси = Неопределено, ПолучитьПустыеНастройкиПроксиСервера(), НастройкиПрокси);
			//Прокси = СформироватьПрокси(НастройкиПрокси, Протокол);
			if(true/*Протокол = "ftp"*/)
			{
			}
			if(true/*НастройкаСохранения["Путь"] <> Неопределено*/)
			{
				//ПутьДляСохранения = НастройкаСохранения["Путь"];
			}
			/*// Если сохраняем файл в соответствии с настройкой 
*/
			if(true/*НастройкаСохранения["МестоХранения"] = "ВременноеХранилище"*/)
			{
				//КлючУникальности = Новый УникальныйИдентификатор;
				//Адрес = ПоместитьВоВременноеХранилище (ПутьДляСохранения, КлючУникальности);
			}
			return null;
		}
		// Функция формирует прокси по настройкам прокси (передаваемому параметру)
		//
		// Параметры:
		//
		// НастройкаПроксиСервера - Соответствие:
		//		ИспользоватьПрокси - использовать ли прокси-сервер
		//		НеИспользоватьПроксиДляЛокальныхАдресов - использовать ли прокси-сервер для локальных адресов
		//		ИспользоватьСистемныеНастройки - использовать ли системные настройки прокси-сервера
		//		Сервер       - адрес прокси-сервера
		//		Порт         - порт прокси-сервера
		//		Пользователь - имя пользователя для авторизации на прокси-сервере
		//		Пароль       - пароль пользователя
		// Протокол - строка - протокол для которого устанавливаются параметры прокси сервера, например "http", "https", "ftp"
		//

		public object СформироватьПрокси(/*НастройкаПроксиСервера, Протокол*/)
		{
			if(true/*НастройкаПроксиСервера <> Неопределено*/)
			{
				//ИспользоватьПрокси = НастройкаПроксиСервера.Получить("ИспользоватьПрокси");
				//ИспользоватьСистемныеНастройки = НастройкаПроксиСервера.Получить("ИспользоватьСистемныеНастройки");
				if(true/*ИспользоватьПрокси*/)
				{
					if(true/*ИспользоватьСистемныеНастройки*/)
					{
						/*// Системные настройки прокси-сервера
*/
						//Прокси = Новый ИнтернетПрокси(Истина);
					}
				}
			}
			return null;
		}
		// Разделяет URL по составным частям: протокол, сервер, путь к ресурсу.
		//
		// Параметры:
		//  URL - Строка - ссылка на ресурс в сети Интернет
		//
		// Возвращаемое значение:
		//  Структура:
		//             Протокол            - Строка - протокол доступа к ресурсу
		//             ИмяСервера          - Строка - сервер, на котором располагается ресурс
		//             ПутьКФайлуНаСервере - Строка - путь к ресурсу на сервере
		//

		public object РазделитьURL(/*знач URL*/)
		{
			//СтруктураURL = СтруктураURI(URL);
			//Результат = Новый Структура;
			//Результат.Вставить("Протокол", ?(ПустаяСтрока(СтруктураURL.Схема),"http",СтруктураURL.Схема));
			//Результат.Вставить("ИмяСервера", СтруктураURL.ИмяСервера);
			//Результат.Вставить("ПутьКФайлуНаСервере", СтруктураURL.ПутьНаСервере);
			return null;
		}
		// Разбирает строку URI на составные части и возвращает в виде структуры.
		// На основе RFC 3986.
		//
		// Параметры:
		//  СтрокаURI - Строка - ссылка на ресурс в формате:
		//
		//     <схема>://<логин>:<пароль>@<хост>:<порт>/<путь>?<параметры>#<якорь>
		//               \______________/ \___________/
		//                      |               |
		//           	   авторизация     имя сервера
		//               \____________________________/ \________________________/
		//                              |                            |
		//                       строка соединения            путь на сервере
		//
		// Возвращаемое значение:
		//  Структура:
		//             Схема         - Строка;
		//             Логин         - Строка;
		//             Пароль        - Строка;
		//             ИмяСервера    - Строка;
		//             Хост          - Строка;
		//             Порт          - Строка;
		//             ПутьНаСервере - Строка;
		//

		public object СтруктураURI(/*Знач СтрокаURI*/)
		{
			//СтрокаURI = СокрЛП(СтрокаURI);
			/*// схема
*/
			//Схема = "";
			//Позиция = Найти(СтрокаURI, "://");
			if(true/*Позиция > 0*/)
			{
				//Схема = НРег(Лев(СтрокаURI, Позиция - 1));
				//СтрокаURI = Сред(СтрокаURI, Позиция + 3);
			}
			/*// строка соединения и путь на сервере
*/
			//СтрокаСоединения = СтрокаURI;
			//ПутьНаСервере = "";
			//Позиция = Найти(СтрокаСоединения, "/");
			if(true/*Позиция > 0*/)
			{
				//ПутьНаСервере = Сред(СтрокаСоединения, Позиция + 1);
				//СтрокаСоединения = Лев(СтрокаСоединения, Позиция - 1);
			}
			/*// информация пользователя и имя сервера
*/
			//СтрокаАвторизации = "";
			//ИмяСервера = СтрокаСоединения;
			//Позиция = Найти(СтрокаСоединения, "@");
			if(true/*Позиция > 0*/)
			{
				//СтрокаАвторизации = Лев(СтрокаСоединения, Позиция - 1);
				//ИмяСервера = Сред(СтрокаСоединения, Позиция + 1);
			}
			/*// логин и пароль
*/
			//Логин = СтрокаАвторизации;
			//Пароль = "";
			//Позиция = Найти(СтрокаАвторизации, ":");
			if(true/*Позиция > 0*/)
			{
				//Логин = Лев(СтрокаАвторизации, Позиция - 1);
				//Пароль = Сред(СтрокаАвторизации, Позиция + 1);
			}
			/*// хост и порт
*/
			//Хост = ИмяСервера;
			//Порт = "";
			//Позиция = Найти(ИмяСервера, ":");
			if(true/*Позиция > 0*/)
			{
				//Хост = Лев(ИмяСервера, Позиция - 1);
				//Порт = Сред(ИмяСервера, Позиция + 1);
			}
			//Результат = Новый Структура;
			//Результат.Вставить("Схема", Схема);
			//Результат.Вставить("Логин", Логин);
			//Результат.Вставить("Пароль", Пароль);
			//Результат.Вставить("ИмяСервера", ИмяСервера);
			//Результат.Вставить("Хост", Хост);
			//Результат.Вставить("Порт", Порт);
			//Результат.Вставить("ПутьНаСервере", ПутьНаСервере);
			return null;
		}
		// Функция, заполняющая структуру по параметрам.
		//
		// Параметры:
		// УспехОперации - булево - успех или неуспех операции
		// СообщениеПуть - строка -
		//
		// Возвращаемое значение - структура:
		//          поле успех - булево
		//          поле путь  - строка
		//

		public object СформироватьРезультат(/*знач Статус, знач СообщениеПуть*/)
		{
			//Результат = Новый Структура("Статус");
			//Результат.Статус = Статус;
			if(true/*Статус*/)
			{
				//Результат.Вставить("Путь", СообщениеПуть);
			}
			return null;
		}
		// Функция возвращает пустые настройки прокси-сервера, соответствующие не использованию прокси-сервера
		//
		// Возвращаемое значение - структура:
		//		ИспользоватьПрокси - использовать ли прокси-сервер
		//		НеИспользоватьПроксиДляЛокальныхАдресов - использовать ли прокси-сервер для локальных адресов
		//		ИспользоватьСистемныеНастройки - использовать ли системные настройки прокси-сервера
		//		Сервер       - адрес прокси-сервера
		//		Порт         - порт прокси-сервера
		//		Пользователь - имя пользователя для авторизации на прокси-сервере
		//		Пароль       - пароль пользователя
		//

		public object ПолучитьПустыеНастройкиПроксиСервера(/**/)
		{
			//НастройкаПроксиСервера = Новый Соответствие;
			//НастройкаПроксиСервера.Вставить("ИспользоватьПрокси", Ложь);
			//НастройкаПроксиСервера.Вставить("Пользователь", "");
			//НастройкаПроксиСервера.Вставить("Пароль", "");
			//НастройкаПроксиСервера.Вставить("Порт", "");
			//НастройкаПроксиСервера.Вставить("Сервер", "");
			//НастройкаПроксиСервера.Вставить("НеИспользоватьПроксиДляЛокальныхАдресов", Ложь);
			//НастройкаПроксиСервера.Вставить("ИспользоватьСистемныеНастройки", Ложь);
			return null;
		}
	}
}
